软考真题
第4题
阅读以下关于数据采集与处理系统的说明,回答问题1至问题3。

【说明】
某公司承接了一个数据采集与处理系统的项目,由刘工负责系统的方案设计,刘工的设计方案如图4-1所示。该方案是基于PCI总线的多功能处理系统,PCI设备1是以太网,PCI设备2用于数据采集,PCI设备3、PCI设备4用于和该系统中的其他处理模块进行互联,LEGACY设备1、LEGACY设备2用于处理系统中一些慢速设备。

【问题:4.1】在以下描述PCI总线的基本概念中,正确的表述(1)、(2)、(3)、(4)、(5)、(6)。
A. PCI总线是一个与处理器有关的高速外围总线
B. PCI总线的基本传输机制是猝发式传送
C. PCI设备一定是主设备
D. PCI的物理地址与其他总线一样,是由内存地址空间和I/O地址组成
E. PCI设备的地址译码不能对配置空间直接寻址
F. PCI设备识别主要是对开发商代码和设备代码进行识别
G. 访问配置空间时,PCI桥应提供IDSEL信号以选择PCI设备
H. 系统中只允许有一条PCI总线
I. PCI总线是高速串行总线
J. PCI总线有3种桥,即HOST/PCI桥,PCI/PCI桥,PCI/LEGACY桥
K. PCI桥是可以把一条总线的地址空间映射到另一条总线的地址空间
【问题:4.2】PCI设备2和主CPU之间采用双口RAM方式交换数据,双口RAM是常见的共享式多端口存储器,其最大的特点是存储数据共享。它允许两个独立的CPU或控制器同时异步访问存储单元。既然数据共享,就必须存在访问仲裁控制,否则就会出现错误或冲突。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配;信令交换逻辑(例如中断信号)等。
两个端口对同一内存操作有4种情况:
A. 两个端口同时对同一地址单元读出数据;
B. 两个端口同时对同一地址单元写入数据;
C. 两个端口不同时对同一地址单元存取数据;
D.两个端口同时对同一地址单元,一个写入数据,另一个读出数据。
在上述情况下,两个端口的存取不会出现错误的是(1)和(2),会出现写入错误的是(3),会出现读出错误的是(4)。
【问题:4.3】PCI设备2和主CPU之间通过双端口存储器进行数据交换。刘工设计了环形队列的实现方式。设备2向环形队列写入数据,主CPU从环形队列读取数据。环形队列是一个首尾相连的FIFO数据结构,采用数组存储,到达尾部时将转回到0位置,该转回是通过取模操作来实现的。因此环形队列逻辑上是将数组元素q[0]与q[MAX-l]连接,形成一个存放队列的环形空间。为了方便读写,还要用数组下标来指明队列的读写位置,其中head指向可以读的位置,tail指向可以写的位置,环形队列如图4-2所示。
使用环形队列时需要判断队列为空还是为满。当tail追上head时,队列为满,当head追上tail时,队列为空。通常判断环形队列为空/为满有两种判断方法。

1. 附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1;
2. 限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素的空间。队列空:head==tai;队列满:(tail+1)%MAXN=head。
如果采用第一种方法(即附加标志实现算法),则环形队列的结构定义如下:

初始化环形队列的c语言代码为:

判断队列为空的c语言代码为(1)。
判断队列为满的C语言代码为(2)。
入队操作时,如果队列不满,则入队后更新尾指针的C语言代码为q->tail=(3)。
出队操作时,如果队列不空,则出队后更新头指针的C语言代码为q->head:(4)。
如果采用第二种方法,还采用上述数据结构,初始化环形队列的C语言代码为:

判断队列为空的C语言代码为(5)。
判断队列为满的C语言代码为(6)。
入队操作时,如果队列不满,则入队后更新尾指针的C语言代码为q->tail=(7)。
出队操作时,如果队列不空,则出队后更新头指针的C语言代码为g->head=(8)。
答题卡
加油
纠错
得分:0